package com.pe.pgn.clubpgn.domain;

import java.math.BigDecimal;
import java.util.Calendar;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.compass.annotations.Searchable;
import org.hibernate.annotations.Type;
import org.springframework.format.annotation.DateTimeFormat;

@Entity
@Table(name = "clpb_vehiculo")
@Searchable
public class ClpbVehiculo extends CamposAuditoria{

	private static final long serialVersionUID = 3670603287278571004L;
	private Long id;
	private String dePlaca;
	private String deModelo;
	private String deTipoVehiculo;
	private String coTipoVehiculo;
	private ClpbTipoVehiculo clpbTipoVehiculo;
	private Long coFormaPago;
	private BigDecimal vaPorcentajeCredito;
	private Long coCausaBloqueo;
	private Long coCliente;
	private BigDecimal vaPrecio;
	private Calendar daFechaProximoMantenimiento;
	private String deRom;
	private Calendar daUltimaActualizacion;
	private boolean stVehiculo;
	private boolean stExcluidoControlFraude;

	public ClpbVehiculo() {
		clpbTipoVehiculo = new ClpbTipoVehiculo();
	}
	
	@Id
    @Column(name="id")
    @SequenceGenerator(name="seqvehiculo", sequenceName="seq_vehiculo")
    @GeneratedValue(generator="seqvehiculo")
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}
	
	@Column(name = "de_placa")
	public String getDePlaca() {
		return dePlaca;
	}
	public void setDePlaca(String dePlaca) {
		this.dePlaca = dePlaca;
	}
	
	@Column(name = "de_modelo")
	public String getDeModelo() {
		return deModelo;
	}
	public void setDeModelo(String deModelo) {
		this.deModelo = deModelo;
	}
	
	@ManyToOne(targetEntity = ClpbTipoVehiculo.class)
	@JoinColumn(name="co_tipo_vehiculo",nullable=false)
	public ClpbTipoVehiculo getClpbTipoVehiculo() {
		return clpbTipoVehiculo;
	}
	public void setClpbTipoVehiculo(ClpbTipoVehiculo clpbTipoVehiculo) {
		this.clpbTipoVehiculo = clpbTipoVehiculo;
	}
	
	@Column(name = "co_forma_pago")
	public Long getCoFormaPago() {
		return coFormaPago;
	}
	public void setCoFormaPago(Long coFormaPago) {
		this.coFormaPago = coFormaPago;
	}
	
	@Column(name = "va_porcentaje_credito")
	public BigDecimal getVaPorcentajeCredito() {
		return vaPorcentajeCredito;
	}
	public void setVaPorcentajeCredito(BigDecimal vaPorcentajeCredito) {
		this.vaPorcentajeCredito = vaPorcentajeCredito;
	}
	
	@Column(name = "co_causa_bloqueo")
	public Long getCoCausaBloqueo() {
		return coCausaBloqueo;
	}
	public void setCoCausaBloqueo(Long coCausaBloqueo) {
		this.coCausaBloqueo = coCausaBloqueo;
	}
	
	@Column(name = "co_cliente")
	public Long getCoCliente() {
		return coCliente;
	}

	public void setCoCliente(Long coCliente) {
		this.coCliente = coCliente;
	}

	@Column(name = "va_precio")
	public BigDecimal getVaPrecio() {
		return vaPrecio;
	}
	public void setVaPrecio(BigDecimal vaPrecio) {
		this.vaPrecio = vaPrecio;
	}
	
	@Column(name = "da_fecha_proximo_mantenimiento")
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaProximoMantenimiento() {
		return daFechaProximoMantenimiento;
	}
	public void setDaFechaProximoMantenimiento(Calendar daFechaProximoMantenimiento) {
		this.daFechaProximoMantenimiento = daFechaProximoMantenimiento;
	}
	
	@Column(name = "de_rom")
	public String getDeRom() {
		return deRom;
	}
	public void setDeRom(String deRom) {
		this.deRom = deRom;
	}
	
	@Column(name = "da_ultima_actualizacion")
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaUltimaActualizacion() {
		return daUltimaActualizacion;
	}
	public void setDaUltimaActualizacion(Calendar daUltimaActualizacion) {
		this.daUltimaActualizacion = daUltimaActualizacion;
	}

	@Column(name = "co_usuario_creador", updatable = false, nullable = false, length = 30)
	public String getCoUsuarioCreador() {
		return coUsuarioCreador;
	}

    @Column(name = "da_fecha_creacion", updatable = false, nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaCreacion() {
		return daFechaCreacion;
	}

	@Column(name = "co_usuario_modificador", length = 30)
	public String getCoUsuarioModificador() {
		return coUsuarioModificador;
	}

    @Column(name = "da_fecha_modificacion")
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaModificacion() {
		return daFechaModificacion;
	}

    @Column(name = "st_vehiculo", nullable = true)
	@Type(type = "yes_no") 
	public boolean isStVehiculo() {
		return stVehiculo;
	}

	public void setStVehiculo(boolean stVehiculo) {
		this.stVehiculo = stVehiculo;
	}
	
	@Column(name = "st_excluido_control_fraude", nullable = false)
	@Type(type = "yes_no") 
	public boolean isStExcluidoControlFraude() {
		return stExcluidoControlFraude;
	}

	public void setStExcluidoControlFraude(boolean stExcluidoControlFraude) {
		this.stExcluidoControlFraude = stExcluidoControlFraude;
	}
	
	@Transient
	public String getDeTipoVehiculo() {
		return deTipoVehiculo;
	}

	public void setDeTipoVehiculo(String deTipoVehiculo) {
		this.deTipoVehiculo = deTipoVehiculo;
	}

	@Transient
	public String getCoTipoVehiculo() {
		return coTipoVehiculo;
	}

	public void setCoTipoVehiculo(String coTipoVehiculo) {
		this.coTipoVehiculo = coTipoVehiculo;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 17;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (getClass() != obj.getClass())
			return false;
		ClpbVehiculo other = (ClpbVehiculo) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return this.deModelo;
	}
}
